﻿Imports System.Data
Imports System.IO
Imports VSModel
Imports Cls_Common
Imports SecurityService
Partial Class Control_MaSoThue_ImportFromExcel
    Inherits System.Web.UI.UserControl
    Private Shared ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
    'khai báo biên dùng cho btnUpload
    Dim _lstCMND As New List(Of String)
    Dim _lstMST As New List(Of String)
    Dim MaCQT, TenCQT, SoNguoiNopThue, MaSoThue, TenNguoiNopThue, MaNganhChinh, TenNganhChinh, SoNha, MaPhuongXa, TenPhuongXa, MaHuyen, _
        Huyen, MaTinh, TenTinh, TongSoLaoDong, NganhNghe, TenGiamDoc, DienThoaiGiamDoc, SoGiayTo, NgayCap, LoaiGiayTo, SoGCN, NgayCapGCN, _
        CMND, TenChuong, TenKhoan, LoaiNguoiNopThue, MaTrangThaiDKTCaNhan, TrangThaiDKTCaNhan, MaTrangThaiDKTToChuc, TrangThaiDKTToChuc, _
        NgayNhanToKhai, LoaiHinhKinhTe, TamNghiTuNgay, TamNghiDenNgay, LyDoTamNghi, LyDoDongMSTCaNhan, NgayDongTrangThaiCaNhan, LyDoDongMSTToChuc, _
        NgayDongTrangThaiToChuc, QuocTich, NgaySinh, VonKinhDoanh, NguonVonNSNN, NguonVonNuocNgoai, NguonVonKhac, NgayBatDauKinhDoanh, DienThoaiBan As String
    Dim _dateNow As DateTime = Now
    Dim i As Integer = 0
    '------------------------------------------------------------------------------------
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        If Not IsPostBack Then
            Dim script As ScriptManager = ScriptManager.GetCurrent(Me.Page)
            If Not script Is Nothing AndAlso script.IsInAsyncPostBack Then
                ScriptManager.RegisterStartupScript(Me.Page, Me.Page.GetType, "regjs", "ajaxJquery()", True)
            Else
                Me.Page.ClientScript.RegisterStartupScript(Me.Page.GetType(), "regjs", String.Concat("Sys.Application.add_load(function(){", "ajaxJquery()", "});"), True)
            End If
        End If
    End Sub

    Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click

        If txtFileNameUpload.Value.Trim <> "" Then
            Using data As New VSEntities
                Dim FilePath As String = ""
                Try
                    Dim relativePath As String = Server.MapPath("~") & "\Uploads\"
                    'Complete path of the file.
                    FilePath = relativePath + txtFileNameUpload.Value
                    If Not File.Exists(Server.MapPath("~") & "\Uploads\" & txtFileNameUpload.Value) Then
                        Excute_Javascript("Alertbox('File không tồn tại trên server !');", Me.Page, True)
                        Exit Sub
                    End If
                    ' Get Data from file 
                    Dim dt As DataTable = New DataTable()
                    ' dt = ReadExcelToDT(FilePath, dòng bắt đầu,col bắt đầu, "")
                    'luôn chọn dòng đầu tiên là dòng có title để đếm chính xác số col cần đọc
                    dt = ReadExcelToDT(FilePath, 0, 0, "")

                    'trừ đi dòng title đầu tiên
                    RemoveEmptyRow(dt1:=dt)

                    For Each item As DataRow In dt.Rows
                        Try
                            MaCQT = item(0).ToString.Trim() 'Cơ quan thuế
                            TenCQT = item(1).ToString.Trim() 'Tên cơ quan thuế
                            SoNguoiNopThue = item(2).ToString.Trim() 'Người nộp thuế
                            MaSoThue = item(3).ToString.Trim() 'Mã số thuế
                            TenNguoiNopThue = item(4).ToString.Trim() 'Tên người nộp thuế
                            MaNganhChinh = item(5).ToString.Trim() 'Mã ngành nghề KD chính
                            TenNganhChinh = item(6).ToString.Trim() 'Tên ngành nghề KD chính
                            SoNha = item(7).ToString.Trim() 'Số nhà/Đường phố
                            MaPhuongXa = item(8).ToString.Trim() 'Mã Phường Xã
                            TenPhuongXa = item(9).ToString.Trim() 'Tên Phường Xã

                            'MaHuyen = item(10).ToString.Trim() 'Mã Quận/Huyện
                            MaHuyen = Session("HuyenId") 'Mã Quận/Huyện

                            Huyen = item(11).ToString.Trim() 'Tên Quận/Huyện
                            MaTinh = item(12).ToString.Trim() 'Mã Tỉnh/Thành Phố
                            TenTinh = item(13).ToString.Trim() 'Tên Tỉnh/Thành Phố
                            TongSoLaoDong = item(14).ToString.Trim() 'Tổng số lao động
                            NganhNghe = item(15).ToString.Trim() 'Ngành nghề kinh doanh
                            TenGiamDoc = item(16).ToString.Trim() 'Tên giám đốc
                            DienThoaiGiamDoc = item(17).ToString.Trim() 'Điện thoại giám đốc
                            SoGiayTo = item(18).ToString.Trim() 'Số giấy tờ
                            NgayCap = item(19).ToString.Trim() 'Ngày cấp
                            LoaiGiayTo = item(20).ToString.Trim() 'Loại giấy tờ
                            SoGCN = item(21).ToString.Trim() 'Số giấy chứng nhận đăng ký kinh doanh
                            NgayCapGCN = item(22).ToString.Trim() 'Ngày cấp giấy chứng nhận ĐKKD
                            CMND = item(23).ToString.Trim() 'Số CMND
                            TenChuong = item(24).ToString.Trim() 'Chương
                            TenKhoan = item(25).ToString.Trim() 'Khoản
                            LoaiNguoiNopThue = item(26).ToString.Trim() 'Loại người nộp thuế

                            If item(27).ToString.Trim <> "" Then
                                MaTrangThaiDKTCaNhan = item(27).ToString 'Mã trạng thái ĐKT cá nhân
                            Else
                                MaTrangThaiDKTCaNhan = LayMaDKTByText(item(28).ToString.Trim())
                            End If
                            TrangThaiDKTCaNhan = item(28).ToString 'Trạng thái ĐKT cá nhân

                            If item(29).ToString.Trim <> "" Then
                                MaTrangThaiDKTToChuc = item(29).ToString 'Mã trạng thái ĐKT tổ chức
                            Else
                                MaTrangThaiDKTToChuc = LayMaDKTByText(item(30).ToString.Trim()) 'Mã trạng thái ĐKT tổ chức
                            End If
                            TrangThaiDKTToChuc = item(30).ToString 'Trạng thái ĐKT tổ chức

                            NgayNhanToKhai = item(31).ToString.Trim() 'Ngày nhận tờ khai
                            LoaiHinhKinhTe = item(32).ToString.Trim() 'Loại hình kinh tế
                            TamNghiTuNgay = item(33).ToString.Trim() 'Tạm nghỉ từ ngày
                            TamNghiDenNgay = item(34).ToString.Trim() 'Tạm nghỉ đến ngày
                            LyDoTamNghi = item(35).ToString.Trim() 'Lý do tạm nghỉ
                            LyDoDongMSTCaNhan = item(36).ToString.Trim() 'Lý do đóng MST cá nhân
                            NgayDongTrangThaiCaNhan = item(37).ToString.Trim() 'Ngày đóng trạng thái cá nhân
                            LyDoDongMSTToChuc = item(38).ToString.Trim() 'Lý do đóng MST tổ chức
                            NgayDongTrangThaiToChuc = item(39).ToString.Trim() 'Ngày đóng trạng thái tổ chức
                            QuocTich = item(40).ToString.Trim() 'Quốc tịch
                            NgaySinh = item(41).ToString.Trim() 'Ngày sinh
                            VonKinhDoanh = item(42).ToString.Trim() 'Vốn kinh doanh
                            NguonVonNSNN = item(43).ToString.Trim() 'Nguồn vốn NSNN
                            NguonVonNuocNgoai = item(44).ToString.Trim() 'Nguồn vốn nước ngoài
                            NguonVonKhac = item(45).ToString.Trim() 'Nguồn vốn khác
                            NgayBatDauKinhDoanh = item(46).ToString.Trim() 'Ngày bắt đầu kinh doanh
                            DienThoaiBan = item(47).ToString.Trim() 'Điện thoại bàn

                            ' Kiểm tra trùng theo Số CMND
                            If CMND <> "" AndAlso (From q In data.NguoiNopThues Where q.CMND = CMND).Count > 0 Then
                                _lstCMND.Add(CMND)
                            End If
                            'kiểm tra MST đã tồn tại hay chưa
                            If MaSoThue <> "" AndAlso (From q In data.NguoiNopThues Where q.MaSoThue = MaSoThue).Count > 0 Then
                                If UpdateMST(MaSoThue) Then
                                Else
                                    Excute_Javascript("Alertbox('Xãy ra lỗi trong lúc xử lý dữ liệu file.');", Me.Page, True)
                                End If
                                _lstMST.Add(MaSoThue)
                            Else
                                If InsertMST(MaSoThue) Then
                                Else
                                    Excute_Javascript("Alertbox('Xãy ra lỗi trong lúc xử lý dữ liệu file.');", Me.Page, True)
                                End If
                            End If

                        Catch ex As Exception

                        End Try

                    Next
                    ' Save data

                    ' Hiển thị danh sách các Item trùng CMND
                    If Not IsNothing(_lstCMND) AndAlso _lstCMND.Count > 0 Then
                        ltrDanhSachCMND.Text = "Danh Sach CMND"
                        lblCMND.Text = "CMND tồn tại trong hệ thống " & _lstCMND.Count
                        ltrExistsCMND.Text = String.Join("</br>", _lstCMND.ToArray)
                    End If
                    'Hiển thị danh sách các Item Update MST
                    If Not IsNothing(_lstMST) AndAlso _lstMST.Count > 0 Then
                        ltrDanhSachMST.Text = "Danh Sach MST"
                        lblMST.Text = "MST tồn tại trong hệ thống " & _lstMST.Count
                        ltrMSTUpdate.Text = String.Join("</br>", _lstMST.ToArray)
                    End If
                    lblDong.Text = "Dữ liệu xử lý " & i.ToString & " bản ghi"
                    'xu ly doi xung data o day
                    Dim _provinceId As Integer = Session("ProvinceId")
                    data.uspNguoiNopThueDoiXung(_provinceId)

                    Excute_Javascript("Alertbox('Cập nhật liệu thành công. " + i.ToString + " bản ghi');showHide(1)", Me.Page, True)
                Catch ex As Exception
                    log4net.Config.XmlConfigurator.Configure()
                    log.Error("Error error " & AddTabSpace(1) & Session("Username") & AddTabSpace(1) & "IP:" & GetIPAddress(), ex)
                    Excute_Javascript("Alertbox('Xãy ra lỗi trong lúc xử lý dữ liệu file. \n " & ex.Message & "');", Me.Page, True)
                Finally
                    ' final-> Delete file upload
                    If File.Exists(FilePath) Then
                        File.Delete(FilePath)
                    End If
                End Try
            End Using
        End If
    End Sub
    Protected Function LayMaDKTByText(_TrangThaiDKT As String) As String
        Select Case _TrangThaiDKT
            Case "Đang hoạt động"
                Return "00"
            Case "Đang hoạt động (được cấp thông báo MST)"
                Return "04"
            Case "Ngừng hoạt động và đã đóng MST"
                Return "01"
            Case "Ngừng hoạt động chưa đóng MST"
                Return "03"
            Case "Tạm nghỉ kinh doanh có thời hạn"
                Return "05"
            Case Else
                Return "02"
        End Select
    End Function
    Protected Function InsertMST(_MaSoThue As String) As Boolean
        Using Data As New VSEntities
            Try
                Dim ch As New NguoiNopThue
                With ch
                    .MaCQT = MaCQT
                    .TenCQT = TenCQT
                    .SoNguoiNopThue = SoNguoiNopThue
                    .MaSoThue = MaSoThue
                    .TenNguoiNopThue = TenNguoiNopThue
                    .MaNganhChinh = MaNganhChinh
                    .TenNganhChinh = TenNganhChinh
                    .SoNha = SoNha
                    .MaPhuongXa = MaPhuongXa
                    .TenPhuongXa = TenPhuongXa
                    .MaHuyen = MaHuyen
                    .Huyen = Huyen
                    .MaTinh = MaTinh
                    .TenTinh = TenTinh
                    .TongSoLaoDong = TongSoLaoDong
                    .NganhNghe = NganhNghe
                    .TenGiamDoc = TenGiamDoc
                    .DienThoaiGiamDoc = DienThoaiGiamDoc
                    .SoGiayTo = SoGiayTo
                    .NgayCap = NgayCap
                    .LoaiGiayTo = LoaiGiayTo
                    .SoGCN = SoGCN
                    .NgayCapGCN = NgayCapGCN
                    .CMND = CMND
                    .TenChuong = TenChuong
                    .TenKhoan = TenKhoan
                    .LoaiNguoiNopThue = LoaiNguoiNopThue
                    .MaTrangThaiDKTCaNhan = MaTrangThaiDKTCaNhan
                    .TrangThaiDKTCaNhan = TrangThaiDKTCaNhan
                    .MaTrangThaiDKTToChuc = MaTrangThaiDKTToChuc
                    .TrangThaiDKTToChuc = TrangThaiDKTToChuc
                    .NgayNhanToKhai = NgayNhanToKhai
                    .LoaiHinhKinhTe = LoaiHinhKinhTe
                    .TamNghiTuNgay = TamNghiTuNgay
                    .TamNghiDenNgay = TamNghiDenNgay
                    .LyDoTamNghi = LyDoTamNghi
                    .LyDoDongMSTCaNhan = LyDoDongMSTCaNhan
                    .NgayDongTrangThaiCaNhan = NgayDongTrangThaiCaNhan
                    .LyDoDongMSTToChuc = LyDoDongMSTToChuc
                    .NgayDongTrangThaiToChuc = NgayDongTrangThaiToChuc
                    .QuocTich = QuocTich
                    .NgaySinh = NgaySinh
                    .VonKinhDoanh = VonKinhDoanh
                    .NguonVonNSNN = NguonVonNSNN
                    .NguonVonNuocNgoai = NguonVonNuocNgoai
                    .NguonVonKhac = NguonVonKhac
                    .NgayBatDauKinhDoanh = NgayBatDauKinhDoanh
                    .DienThoaiBan = DienThoaiBan
                End With
                Data.NguoiNopThues.AddObject(ch)
                Data.SaveChanges()
                i = i + 1
                Return True
            Catch ex As Exception
                Return False
            End Try
        End Using
    End Function
    Protected Function UpdateMST(_MaSoThue As String) As Boolean
        Using Data As New VSEntities
            Dim p = (From q In Data.NguoiNopThues Where q.MaSoThue = MaSoThue Select q).FirstOrDefault
            If p Is Nothing Then
                Return False
                Exit Function
            End If
            Try
                With p
                    .MaCQT = MaCQT
                    .TenCQT = TenCQT
                    .SoNguoiNopThue = SoNguoiNopThue
                    .MaSoThue = MaSoThue
                    .TenNguoiNopThue = TenNguoiNopThue
                    .MaNganhChinh = MaNganhChinh
                    .TenNganhChinh = TenNganhChinh
                    .SoNha = SoNha
                    .MaPhuongXa = MaPhuongXa
                    .TenPhuongXa = TenPhuongXa
                    .MaHuyen = MaHuyen
                    .Huyen = Huyen
                    .MaTinh = MaTinh
                    .TenTinh = TenTinh
                    .TongSoLaoDong = TongSoLaoDong
                    .NganhNghe = NganhNghe
                    .TenGiamDoc = TenGiamDoc
                    .DienThoaiGiamDoc = DienThoaiGiamDoc
                    .SoGiayTo = SoGiayTo
                    .NgayCap = NgayCap
                    .LoaiGiayTo = LoaiGiayTo
                    .SoGCN = SoGCN
                    .NgayCapGCN = NgayCapGCN
                    .CMND = CMND
                    .TenChuong = TenChuong
                    .TenKhoan = TenKhoan
                    .LoaiNguoiNopThue = LoaiNguoiNopThue
                    .MaTrangThaiDKTCaNhan = MaTrangThaiDKTCaNhan
                    .TrangThaiDKTCaNhan = TrangThaiDKTCaNhan
                    .MaTrangThaiDKTToChuc = MaTrangThaiDKTToChuc
                    .TrangThaiDKTToChuc = TrangThaiDKTToChuc
                    .NgayNhanToKhai = NgayNhanToKhai
                    .LoaiHinhKinhTe = LoaiHinhKinhTe
                    .TamNghiTuNgay = TamNghiTuNgay
                    .TamNghiDenNgay = TamNghiDenNgay
                    .LyDoTamNghi = LyDoTamNghi
                    .LyDoDongMSTCaNhan = LyDoDongMSTCaNhan
                    .NgayDongTrangThaiCaNhan = NgayDongTrangThaiCaNhan
                    .LyDoDongMSTToChuc = LyDoDongMSTToChuc
                    .NgayDongTrangThaiToChuc = NgayDongTrangThaiToChuc
                    .QuocTich = QuocTich
                    .NgaySinh = NgaySinh
                    .VonKinhDoanh = VonKinhDoanh
                    .NguonVonNSNN = NguonVonNSNN
                    .NguonVonNuocNgoai = NguonVonNuocNgoai
                    .NguonVonKhac = NguonVonKhac
                    .NgayBatDauKinhDoanh = NgayBatDauKinhDoanh
                    .DienThoaiBan = DienThoaiBan
                End With
                Data.SaveChanges()
                i = i + 1
                Return True
            Catch ex As Exception
                log4net.Config.XmlConfigurator.Configure()
                log.Error("Error error " & AddTabSpace(1) & Session("Username") & AddTabSpace(1) & "IP:" & GetIPAddress(), ex)
                Return False
            End Try
        End Using
    End Function
End Class
